package net.zoneland.zrdp.biz.service;

import net.zoneland.zrdp.biz.domain.pojo.query.TaskQuery;
import net.zoneland.zrdp.biz.domain.pojo.vo.ItemInfo;
import net.zoneland.zrdp.common.core.page.Pager;
import net.zoneland.zrdp.framework.web.domain.uniflow.ReadObjectPojo;
import net.zoneland.zrdp.framework.web.domain.uniflow.TaskObjectPojo;

import java.util.List;

public interface IWorkOrderService {
    /**
     * 查询工单任务.
     * TaskQuery 中的状态条件：
     * FINISH、STOP、SINGLE_ASSIGNMENT 状态为已办；
     * READY、ASSIGNED 状态为待办；
     * DRAFT 状态为草稿；
     * READY、FINISH、DRAFT、ASSIGNED 状态为我的工单；
     * @param taskQuery 任务查询参数.
     * @param isApplyTask 是否最新任务.true：（每条工单取一条最新的已办）
     * @return 对应的结果
     **/
    Pager<TaskObjectPojo> queryTask(final TaskQuery taskQuery, final boolean isApplyTask);



    /**
     * 查询工单任务列表.带补全当前节点状态
     * @param taskQuery 任务查询参数.
     * @param isApplyTask 是否最新任务.true：（每条工单取一条最新的已办）
     * @return 对应的结果
     */
    Pager<TaskObjectPojo> queryTaskWithCurrentNodeName(final TaskQuery taskQuery, final boolean isApplyTask);

    /**
     * 待阅或已阅任务列表.
     * TaskQuery 中的状态条件：
     * FINISH、STOP、SINGLE_ASSIGNMENT 状态为已阅；
     * READY、ASSIGNED 状态为待阅；
     * @param taskQuery 任务查询参数.
     * @return 待阅或已阅任务列表
     **/
    Pager<ReadObjectPojo> queryRead(final TaskQuery taskQuery);

    /**
     * 获取流程信息.
     * @return 流程信息
     **/
    List<ItemInfo> getFlowInfo();


    /**
     * 获取流程状态.
     * @return 流程状态
     **/
    List<ItemInfo> getFlowState();

    /**
     * 查询待办数据量.
     * @param userName 用户名oaId
     * @return 任务数量
     */
    Integer getTaskCount(String userName);

    /**
     * 查询待阅数据量.
     * @param userName 用户名oaId
     * @return 任务数量
     */
    Integer getReadCount(String userName);

}
